import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
    java.IO.FileInputStream:
        1、文件字节输入流，万能的，任何类型的文件都可以采用这个流读
        2、字节的方式，完成输入的操作，完成读的操作(硬盘 --> 内存)
        3、在IDEA中默认的当前路径是Project的根，相对路径读文件
        4、int read(byte[] b)
            一次最多读取b.length个字节，往byte[]数组当中读
            这个方法返回值是读取到的字节数量，不是字节本身
        5、FileInputStream类的其他常用方法：
            int available():返回流当中剩余的没有读到的字节数量
            long skip(long n):跳过几个字节不读
 */
public class FileInputStreamTest01 {
    public static void main(String[] args) {
        //创建对象
        FileInputStream fis = null;
        FileInputStream fis1 = null;
        try {
            //**************************************************************************int read()
            fis = new FileInputStream("F:\\course\\01-JavaSE\\原理图\\IO流\\research.txt");

            //开始读
/*            while(true){   //变成死循环，除非主动跳出
                int readData = fis.read();
                if (readData == -1) {
                    break;
                }
                System.out.println(readData);
            }*/
            //改造while
            int readData = 0;
            while((readData = fis.read()) != -1){
                System.out.println(readData);
            }
            //**************************************************************************int read(byte[] b)
            fis1 = new FileInputStream("chapter21//temp");
            System.out.println("当前文件字节数:" + fis1.available());
            //准备一个byte数组
            byte[] bytes = new byte[4];
            /*while (true){
                int readData1 = fis1.read(bytes);     //
                if (readData1 == -1) {
                    break;
                }
                //把byte数组转换成字符串，读到多少个转换多少个
                System.out.print(new String(bytes,0,readData1));
            }*/
            int readData1 = 0;
            while((readData1 = fis1.read(bytes)) != -1){
                System.out.print(new String(bytes,0,readData1));
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //在finally语句中确保流的关闭
            if (fis != null || fis1 != null) {
                try {
                    fis.close();
                    fis1.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}
